home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / pbtool.exe / MENUBAR.BAS < prev    next >
BASIC Source File  |  1991-11-12  |  5KB  |  118 lines

  1. '----------------------------------------------------------
  2. '  PROGRAM: MENUBAR.BAS        PROGRAMMER: A. KELLETT
  3. '  DATE-WRITTEN: 11/12/91
  4. '  USING POWER BASIC V2.10A
  5. '
  6. '  THIS PROGRAM ALLOWS THE USER TO MAKE CHOICES FROM A
  7. '  MENU BAR ACROSS THE TOP OF THE SCREEN.  PLEASE NOTE
  8. '  THAT ONLY 3 LINES NEED CHANGING IF YOU WANT THE MENUBAR
  9. '  LOCATED SOMEWHERE BESIDES LINE 1 (IE BOTTOM MENU BAR)
  10. '  VERSION: 1.00    LAST UPDATED: 11/12/91
  11. '----------------------------------------------------------
  12. $INCLUDE "KEYS.INC"
  13. $INCLUDE "COLORS.INC"
  14. CLS
  15. DIM MENU$(1:8)
  16. DIM MENU%(1:8)
  17. LOWVAL% = 1:HIVAL% = 8 :REM** LOW/HI VALUES FOR THE CHOICES (VALID RANGE) **
  18.  
  19. '** MENU CHOICES **** COLUMN TO LOCATE IT IN ***
  20. MENU$(1) = "1 Files   ":MENU%(1) = 1
  21. MENU$(2) = "2 Compile ":MENU%(2) = 11
  22. MENU$(3) = "3 Editor  ":MENU%(3) = 21
  23. MENU$(4) = "4 Options ":MENU%(4) = 31
  24. MENU$(5) = "5 Debugger":MENU%(5) = 41
  25. MENU$(6) = "6 Host Sys":MENU%(6) = 51
  26. MENU$(7) = "7 Network ":MENU%(7) = 61
  27. MENU$(8) = "8 Exit-Dos":MENU%(8) = 71
  28. REM** <<ALL>> VALID KEYS THE USER CAN PRESS **
  29. KEYTOPRESS$ = " 12345678" + LEFTARROW$ + RIGHTARROW$ + CR$
  30.  
  31. CALL SCROLLBAR(MENU$(), MENU%(), 1, 1, LOWVAL%, HIVAL%, KEYTOPRESS$, CHOICE%)
  32.  
  33. LOCATE 22,15:PRINT "YOU CHOSE OPTION ";CHOICE%
  34.  
  35. END
  36. '  YOU NEED BOTH SUBROUTINES (SCROLLBAR AND LITEBAR3) IN YOUR PROGRAM.
  37. '  MENU$()   - ARRAY CONTAINING THE MENU TEXT FOR ALL CHOICES
  38. '  LOWVAL%   - LOWEST CHOICE, SHOULD <ALWAYS> BE 1 !
  39. '  HIVAL%    - HIGHEST CHOICE, FOR 10 ITEM MENU SHOULD BE 10
  40. '  VALIDKEY$ - SHOULD CONTAIN ANY KEYS YOU WILL ALLOW FOR
  41. '              IE. VALIDKEYS$ = " 012345678" + LEFTARROW$ + RIGHTARROW$ + CR$
  42. '              BE SURE THE INITIAL SPACE IS LEFT IN AND SEE CHARS.INC FOR
  43. '              PREDEFINED KEYS YOU CAN USE FOR READABILITY.
  44. '  KEYPRESS% - CONTAINS A NUMBER REPRESENTING WHICH MENU CHOICE WAS
  45. '              HILIGHTED WHEN THE USER PRESSED THE <ENTER> KEY
  46. '  NOTES: THIS ROUTINE DOES NOT CHECK WHETHER LENGTH OF ALL MENU CHOICES
  47. '         ARE LONGER THAN 80 CHARACTERS (LESS THAN 80 IS NO PROBLEM).  YOU
  48. '         MUST SET UP THE MENU$() AND MENU%() CORRECTLY BEFORE CALLING THIS
  49. '         ROUTINE.
  50. '
  51. '----------------------------------------------------------
  52. SUB SCROLLBAR(MENU$(), MENU%(), OLD.POS%, NEW.POS%, LOWVAL%, HIVAL%, VALIDKEY$, KEYPRESS%)
  53.    SHARED LEFTARROW$, RIGHTARROW$, CR$
  54.    QUITFLAG% = 0:OLD.POS% = 1:NEW.POS% = 1
  55.    '**** DISPLAY INITIAL MENU CHOICES ****
  56.    FOR I% = LOWVAL% TO HIVAL%
  57.       LOCATE 1, MENU%(I%)   :REM** CHANGE TO ANOTHER LINE IF NEEDED **
  58.       PRINT MENU$(I%);
  59.    NEXT I%
  60.    LOCATE 20,15:PRINT "PRESS <Enter> TO EXIT"
  61.    '**** LOOP UNTIL USER PRESSES <RETURN> KEY ****
  62.    WHILE QUITFLAG% = 0
  63.       CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  64.       DO
  65.          KEYIN$ = INKEY$
  66.       LOOP UNTIL INSTR(VALIDKEY$, KEYIN$) > 1
  67.       IF (KEYIN$ = "0" OR KEYIN$ = CR$) THEN
  68.          KEYPRESS% = NEW.POS%  :REM** WHICH KEY WAS THE CHOICE ON ?? **
  69.          QUITFLAG% = 1         :REM** EXIT THIS SUBROUTINE **
  70.       ELSE
  71.          IF (KEYIN$ = LEFTARROW$ AND NEW.POS% > LOWVAL%) THEN
  72.             OLD.POS% = NEW.POS%
  73.             NEW.POS% = NEW.POS% - 1
  74.             CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  75.          ELSE
  76.             IF (KEYIN$ = RIGHTARROW$ AND NEW.POS% < HIVAL%) THEN
  77.                OLD.POS% = NEW.POS%
  78.                NEW.POS% = NEW.POS% + 1
  79.                CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  80.             ELSE
  81.                IF (KEYIN$ = LEFTARROW$ AND NEW.POS% = 1) THEN
  82.                   OLD.POS% = 1
  83.                   NEW.POS% = HIVAL%
  84.                   CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  85.                ELSE
  86.                   IF (KEYIN$ = RIGHTARROW$ AND NEW.POS% = HIVAL%) THEN
  87.                      OLD.POS% = HIVAL%
  88.                      NEW.POS% = 1
  89.                      CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  90.                   ELSE
  91.                      IF (KEYIN$ <> LEFTARROW$ AND KEYIN$ <> RIGHTARROW$) THEN
  92.                         NEW.POS% = VAL(KEYIN$)
  93.                         CALL LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  94.                      END IF
  95.                   END IF
  96.                END IF
  97.             END IF
  98.          END IF
  99.       END IF
  100.    WEND
  101.  
  102. END SUB
  103. '
  104. '
  105. '----------------------------------------------------------
  106. SUB LITEBAR3(MENU$(), OLD.POS%, NEW.POS%, MENU%())
  107.    SHARED BLACK%, HIGH.INTENSITY.WHITE%, WHITE%
  108.    LOCATE 1, MENU%(OLD.POS%)  :REM** CHANGE TO ANOTHER LINE IF NEEDED **
  109.    COLOR WHITE%, BLACK%:PRINT MENU$(OLD.POS%);:COLOR BLACK%, WHITE%
  110.    '*** NOW HILIGHT NEW CHOICE ***
  111.    COLOR BLACK%, HIGH.INTENSITY.WHITE%
  112.    LOCATE 1, MENU%(NEW.POS%)  :REM** CHANGE TO ANOTHER LINE IF NEEDED **
  113.    PRINT MENU$(NEW.POS%);:COLOR WHITE%, BLACK%
  114.    OLD.POS% = NEW.POS%
  115.  
  116. END SUB
  117.  
  118.